home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Deutsche Edition 1
/
Deutsche Edition 1.iso
/
amok
/
amok_lha
/
amok13.lha
/
CompControl
/
meldung.mod
< prev
next >
Wrap
Text File
|
1993-08-15
|
4KB
|
144 lines
(******************************************************************************)
(*
PROGRAMMNAME : Meldung.mod
VERSION : 1.00
AUTOR : Ralf Kaiser
Winckelmanstraße 1
5600 Wuppertal 2
0202/59 28 10
Start : 29.11.88
Update : 10-12-88
Ende :
Diese Routine dient dazu, Meldungen an den Benutzer ansprechend auf den
Bildschirm zu bringen. Die Meldung wird als ARRAY OF CHAR an die Routine
uebergeben. Dabei dient der Oderstrich "|" als Zeilentrenner. Folgende
Meldung :
Das|ist ein |Test
würde also so auf den Bildschirm gebracht :
Das
ist ein
Test
Die Meldung wird in einem borderless-Window, das genau in der Mitte des
Workbenchscreens erscheint, dargestellt.
Dem Window wird dabei durch zeichnen eines zweifarbigen Randes ein
3D-Effekt verliehen.
Zusätzlich läßt sich noch eine Zeitspanne angeben, nach der das Fenster
geschloßen wird und der Programmablauf fortgesetzt wird. Diese Zeitspanne
wird als INTEGER-Wert, der die Dauer in Ticks (1 Tick = 1/50 sek.) an-
giebt, definiert.
*)
(******************************************************************************)
IMPLEMENTATION MODULE Meldung;
FROM SYSTEM IMPORT
ADR, BYTE;
FROM Arts IMPORT
BreakPoint, Assert, TermProcedure;
FROM Strings IMPORT
Delete, Insert, Length, Occurs, Copy, first, last;
FROM DOS IMPORT
Delay;
FROM Intuition IMPORT
NewScreen, NewWindow, WindowPtr, ScreenPtr, OpenScreen, OpenWindow,
ScreenFlags, ScreenFlagSet, customScreen, WindowFlags, IDCMPFlagSet,
WindowFlagSet, CloseWindow, CloseScreen, ShowTitle;
FROM Graphics IMPORT
Text, RastPortPtr, Move, ViewModes, ViewModeSet, Draw, ScrollRaster,
SetAPen, SetRast, DrawModes, DrawModeSet, SetDrMd, jam1;
FROM IntuiStruct IMPORT
StructWindow;
PROCEDURE ShowMeldung (win: WindowPtr;
Mtext : ARRAY OF CHAR; Zeit: INTEGER);
BEGIN
Laenge := Length (Mtext); laengste := 0;
Zaehler := 0; ZeilenNr := 0;
FOR Temp := 0 TO 10 DO
Delete (Zeile [Temp], 0, 80);
Zeilenlaenge [Temp] := 0;
END;
WHILE Zaehler # Laenge DO
Zeichen [0] := Mtext [Zaehler];
IF Zeichen[0] = "|" THEN
INC (ZeilenNr);
INC (Zaehler);
ELSE
Insert (Zeile [ZeilenNr], -1, Zeichen);
INC (Zaehler);
INC (Zeilenlaenge [ZeilenNr]);
END;
END;
Zaehler := 0; laengste := Length (Zeile [0]);
LOOP
Temp := Length (Zeile [Zaehler]);
IF laengste < Temp THEN laengste := Temp END;
INC (Zaehler);
IF Zaehler > ZeilenNr THEN EXIT; END;
END;
(* Aufbau der NewWindow-Struktur *)
Mheight := ZeilenNr * 8 + 20;
Mwidth := laengste*8 + 32;
Mtop := 256 DIV 2 - Mheight DIV 2;
Mleft := 640 DIV 2 - Mwidth DIV 2;
StructWindow (nw, Mleft, Mtop, Mwidth, Mheight, 0, 1, IDCMPFlagSet{},
WindowFlagSet{gimmeZeroZero, borderless}, NIL,
NIL, ScreenFlagSet{wbenchScreen});
win := OpenWindow (nw);
Assert (win # NIL, ADR("Sorry, no Window ..."));
rp := win^.rPort;
SetRast (rp,3);
SetDrMd (rp, DrawModeSet{complement});
SetAPen (rp,1);
SetDrMd (rp, jam1);
Move (rp, 0, 0);
Draw (rp, win^.width-1, 0);
Draw (rp, win^.width-1, win^.height-1);
SetAPen (rp, 2);
Draw (rp, 0, win^.height-1);
Draw (rp, 0, 1);
SetAPen (rp, 1);
FOR Zaehler := 0 TO ZeilenNr DO
Move (rp, 16, ((Zaehler * 8) + 3) + 10);
Text (rp, ADR(Zeile [Zaehler]), Length (Zeile [Zaehler]));
END;
Delay (Zeit);
CloseWindow (win);
END ShowMeldung;
PROCEDURE Cleanup;
BEGIN
IF win # NIL THEN CloseWindow (win); END;
win := NIL;
END Cleanup;
BEGIN
TermProcedure (Cleanup);
END Meldung.